package com.yugao.fintech.libra.model.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yugao.fintech.libra.common.BasePlusPO;
import com.yugao.fintech.libra.common.enums.BoolEnum;
import com.yugao.fintech.libra.common.tenant.core.DataIsolation;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

/**
 * 角色表

 */
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("sys_role")
@DataIsolation(filterTenant = true, tableName = "sys_role")
public class SysRole extends BasePlusPO {
    private static final long serialVersionUID = 1L;

    /**
     * 角色ID
     */
    @TableId
    private Long id;

    /**
     * 创建者用户id
     */
    @TableField(fill = FieldFill.INSERT)
    private Long createdUid;

    /**
     * 是否为系统内置, 系统内置的不能被删除
     */
    private Boolean sysBuiltIn;

    /**
     * 是否为应用管理员
     * @deprecated
     */
    @Builder.Default
    private Boolean isAdmin = Boolean.FALSE;

    /**
     * 是否为默认, 0-不是默认, 1-默认
     */
    private String isDefault = BoolEnum.FALSE.getCode();

    /**
     * 角色名称
     */
    private String roleName;

    /**
     * 角色编码
     */
    private String roleCode;

    /**
     * 角色排序
     */
    private String roleSort;

    /**
     * 菜单树选择项是否关联显示（ 0：父子不互相关联显示 1：父子互相关联显示）
     */
    private boolean menuCheckStrictly;

    /**
     * 部门组树选择项是否关联显示（0：父子不互相关联显示 1：父子互相关联显示 ）
     */
    private boolean deptCheckStrictly;

    /**
     * 角色状态（1正常 0停用）
     */
    private String status;

    /**
     * 租户编号
     */
    private Long tenantId;

    /**
     * 删除标志
     */
    private String deleted;

    /**
     * 部门Id（数据权限）
     */
    @TableField(exist = false)
    private Long[] deptIds;


    public SysRole(Long id) {
        this.id = id;
    }

    public SysRole() {
    }

    public static LambdaQueryWrapper<SysRole> lqw() {
        return Wrappers.lambdaQuery();
    }

    public boolean isAdmin() {
        return Boolean.TRUE.equals(this.isAdmin);
    }
}
